{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 基础题"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 对连续型特征，可以用哪个函数可视化其分布？（给出你最常用的一个即可），并根据代码运行结果给出示例。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sn\n",
    "from sklearn.linear_model import LinearRegression\n",
    "from sklearn.linear_model import Ridge\n",
    "from sklearn.linear_model import Lasso\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>dteday</th>\n",
       "      <th>season</th>\n",
       "      <th>yr</th>\n",
       "      <th>mnth</th>\n",
       "      <th>hr</th>\n",
       "      <th>holiday</th>\n",
       "      <th>weekday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>weathersit</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>casual</th>\n",
       "      <th>registered</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.24</td>\n",
       "      <td>0.2879</td>\n",
       "      <td>0.81</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>13</td>\n",
       "      <td>16</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.22</td>\n",
       "      <td>0.2727</td>\n",
       "      <td>0.80</td>\n",
       "      <td>0.0</td>\n",
       "      <td>8</td>\n",
       "      <td>32</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.22</td>\n",
       "      <td>0.2727</td>\n",
       "      <td>0.80</td>\n",
       "      <td>0.0</td>\n",
       "      <td>5</td>\n",
       "      <td>27</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>3</td>\n",
       "      <td>4</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.24</td>\n",
       "      <td>0.2879</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.0</td>\n",
       "      <td>3</td>\n",
       "      <td>10</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>4</td>\n",
       "      <td>5</td>\n",
       "      <td>2011-01-01</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.24</td>\n",
       "      <td>0.2879</td>\n",
       "      <td>0.75</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant      dteday  season  yr  mnth  hr  holiday  weekday  workingday  \\\n",
       "0        1  2011-01-01       1   0     1   0        0        6           0   \n",
       "1        2  2011-01-01       1   0     1   1        0        6           0   \n",
       "2        3  2011-01-01       1   0     1   2        0        6           0   \n",
       "3        4  2011-01-01       1   0     1   3        0        6           0   \n",
       "4        5  2011-01-01       1   0     1   4        0        6           0   \n",
       "\n",
       "   weathersit  temp   atemp   hum  windspeed  casual  registered  cnt  \n",
       "0           1  0.24  0.2879  0.81        0.0       3          13   16  \n",
       "1           1  0.22  0.2727  0.80        0.0       8          32   40  \n",
       "2           1  0.22  0.2727  0.80        0.0       5          27   32  \n",
       "3           1  0.24  0.2879  0.75        0.0       3          10   13  \n",
       "4           1  0.24  0.2879  0.75        0.0       0           1    1  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv('hour.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[Text(0.5, 1.0, 'season of counts')]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig,ax = plt.subplots()\n",
    "sn.boxplot(data=data[['season','cnt']],x='season',y='cnt',ax=ax)\n",
    "ax.set(title='season of counts')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. 对两个连续型特征，可以用哪个函数得到这两个特征之间的相关性？根据代码运行结果，给出示例。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>x0</th>\n",
       "      <th>x1</th>\n",
       "      <th>y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <td>x0</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.004299</td>\n",
       "      <td>0.486996</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>x1</td>\n",
       "      <td>0.004299</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>-0.021617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <td>y</td>\n",
       "      <td>0.486996</td>\n",
       "      <td>-0.021617</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          x0        x1         y\n",
       "x0  1.000000  0.004299  0.486996\n",
       "x1  0.004299  1.000000 -0.021617\n",
       "y   0.486996 -0.021617  1.000000"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data = pd.read_csv('date_2.csv',delimiter=',')\n",
    "data = np.array(data)\n",
    "df = pd.DataFrame(data, columns=['x0','x1','y'])\n",
    "cor_mat = df.corr()\n",
    "cor_mat"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. 如果发现特征之间有较强的相关性，在选择线性回归模型时应该采取什么措施。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "-PCA等降维方法。因为在原始特征空间中变量之间相关性大，很容易想到通过降低维度的形式来去除这种共线性。\n",
    "\n",
    "-正则化。使用岭回归（L2）或者lasso回归（L1）或者elasticnet回归（L1+L2）\n",
    "\n",
    "-逐步回归法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. 当采用带正则的模型以及采用随机梯度下降优化算法时，需要对输入（连续型）特征进行去量纲预处理。课程代码给出了用标准化（StandardScaler）的结果，请改成最小最大缩放（MinMaxScaler）去量纲 ，并重新训练最小二乘线性回归、岭回归、和Lasso模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = np.array([4,4, 5, 5, 7, 7, 8, 9, 10, 11, 6300, 5800, 5700, 4500, 4500, 4200, 4100, 3100, 2100, 2500])\n",
    "data = data.reshape(2,10)\n",
    "x = data[0].reshape(-1,1)\n",
    "y = data[1].reshape(-1,1)\n",
    "mm_scaler = MinMaxScaler(feature_range=(0,1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "scaler_x = mm_scaler.fit_transform(x)\n",
    "scaler_y = mm_scaler.fit_transform(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9060679883512545"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 最小二乘线性回归\n",
    "lr = LinearRegression()\n",
    "lr.fit(scaler_x,scaler_y)\n",
    "lr_y = lr.predict(scaler_x)\n",
    "lr.score(scaler_x,scaler_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.9044760585068996"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 岭回归\n",
    "ridge = Ridge(alpha=0.05)\n",
    "ridge.fit(scaler_x,scaler_y)\n",
    "ridge_y = ridge.predict(scaler_x)\n",
    "ridge.score(scaler_x,scaler_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.897423835125448"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Lasso回归\n",
    "lasso = Lasso(alpha=0.01)\n",
    "lasso.fit(scaler_x,scaler_y)\n",
    "lasso_y = lasso.predict(scaler_x)\n",
    "lasso.score(scaler_x,scaler_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0xf196fa8f08>"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(scaler_x,scaler_y)\n",
    "plt.plot(scaler_x,lasso_y,'b',label='lasso')\n",
    "plt.plot(scaler_x,lr_y,'g',label='lr')\n",
    "plt.plot(scaler_x,ridge_y,'r',label='ridge')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在用Ridge回归和Lasso回归时，发现用不同的alpha值得到的拟合图像不一样。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. 代码中给出了岭回归（RidgeCV）和Lasso（LassoCV）超参数（alpha_）调优的过程， 请结合两个最佳模型以及最小二乘线性回归模型的结果，给出什么场合应该用岭回归，什么场合用Lasso，什么场合用最小二乘。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![title](image/poly.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 最小二乘\n",
    "- 适用于数值型数据；\n",
    "- 通过最小化误差的平方和寻找数据的最佳函数匹配；\n",
    "- 当特征出现较多共线性时，使用最小二乘容易导致无法对特征矩阵求逆。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 岭回归\n",
    "- L2损失+L2正则；\n",
    "- 对噪声敏感，处处可导；\n",
    "- 在出现特征共线性时，建议使用。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Lasso回归\n",
    "- L2损失+L1正则；\n",
    "- 对噪声不敏感，但不能处处可导；\n",
    "- 在出现特征共线性时，建议使用。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
